<?php

namespace Admin\Form\Product;

use Zend\InputFilter\InputFilter;

class FilterAddProduct extends InputFilter {

    public function __construct($actionType) {
        if ($actionType == 'add') {
            $requireImage = true;
            $allowEmpty = false;
        } else {
            $requireImage = false;
            $allowEmpty = true;
        }
        //filter for product name
        $this->add(array(
            'name' => 'product_name',
            'required' => true,
            'filters' => array(
                array('name' => 'stringtrim'),
                array('name' => 'striptags')
            ),
            'validators' => array(
                array(
                    'name' => 'notempty',
                    'options' => array(
                        'messages' => array(
                            \Zend\Validator\NotEmpty::IS_EMPTY => 'Nhập tên sản phẩm'
                        )
                    )
                )
            )
        ));

        //filter for product image
        $this->add(array(
            'name' => 'product_image',
            'required' => $requireImage,
            'allow_empty' => $allowEmpty,
            'validators' => array(
                array(
                    'name' => 'fileuploadfile',
                    'break_chain_on_failure' => true,
                    'options' => array(
                        'messages' => array(
                            \Zend\Validator\File\UploadFile::NO_FILE => 'Chọn hình ảnh sản phẩm'
                        )
                    )
                ),
                array(
                    'name' => 'filesize',
                    'break_chain_on_failure' => true,
                    'options' => array(
                        'max' => 524288,
                        'messages' => array(
                            \Zend\Validator\File\Size::TOO_BIG => 'Dung lượng file lớn. Tối đa 512kb',
                            \Zend\Validator\File\Size::NOT_FOUND => 'Chọn hình ảnh sản phẩm'
                        )
                    )
                ),
                array(
                    'name' => 'filemimetype',
                    'break_chain_on_failure' => true,
                    'options' => array(
                        'mimeType' => array('image/gif', 'image/jpg', 'image/png', 'image/jpeg'),
                        'messages' => array(
                            \Zend\Validator\File\MimeType::FALSE_TYPE => 'File không đúng định dạng',
                            \Zend\Validator\File\MimeType::NOT_READABLE => 'Không xác định được định dạng'
                        )
                    )
                ),
                array(
                    'name' => 'fileextension',
                    'break_chain_on_failure' => true,
                    'options' => array(
                        'extension' => array('png', 'gif', 'jpg', 'jpeg'),
                        'messages' => array(
                            \Zend\Validator\File\Extension::FALSE_EXTENSION => 'File không đúng định dạng',
                            \Zend\Validator\File\Extension::NOT_FOUND => ''
                        )
                    )
                ),
            )
        ));

        //filter for product price
        $this->add(array(
            'name' => 'product_price',
            'required' => true,
            'validators' => array(
                array(
                    'name' => 'notempty',
                    'break_chain_on_failure' => true,
                    'options' => array(
                        'messages' => array(
                            \Zend\Validator\NotEmpty::IS_EMPTY => 'Nhập giá sản phẩm'
                        )
                    )
                ),
                array(
                    'name' => 'digits',
                    'break_chain_on_failure' => true,
                    'options' => array(
                        'messages' => array(
                            \Zend\Validator\Digits::NOT_DIGITS => 'Giá nhập không đúng.',
                            \Zend\Validator\Digits::STRING_EMPTY => ''
                        )
                    )
                )
            )
        ));

        //for product price sale of
        $this->add(array(
            'name' => 'product_price_sale_of',
            'allow_empty' => true,
            'validators' => array(
                array(
                    'name' => 'digits',
                    'break_chain_on_failure' => true,
                    'options' => array(
                        'messages' => array(
                            \Zend\Validator\Digits::NOT_DIGITS => 'Giá nhập không đúng.',
                            \Zend\Validator\Digits::STRING_EMPTY => ''
                        )
                    )
                ),
                array(
                    'name' => 'callback',
                    'break_chain_on_failure' => true,
                    'options' => array(
                        'callback' => function($value, $context=array()) {
                            $minPrice = (int)$value;
                            $maxPrice = (int)$context['product_price'];
                            $isValid = $maxPrice > $minPrice;
                            return $isValid;
                        },
                        'messages' => array(
                            \Zend\Validator\Callback::INVALID_VALUE => 'Giá km phải nhỏ hơn giá thực'
                        )
                    )
                )
            )
        ));

        //filter for product category
        $this->add(array(
            'name' => 'product_category_id',
            'required' => true,
            'validators' => array(
                array(
                    'name' => 'notempty',
                    'options' => array(
                        'messages' => array(
                            \Zend\Validator\NotEmpty::IS_EMPTY => 'Chọn danh mục sản phẩm.'
                        )
                    )
                )
            )
        ));

        //filter for product type
        $this->add(array(
            'name' => 'product_type',
            'required' => false,
            'allow_empty' => true
        ));

        //filter for product maker
        $this->add(array(
            'name' => 'product_maker_maker_id',
            'required' => true,
            'validators' => array(
                array(
                    'name' => 'notempty',
                    'options' => array(
                        'messages' => array(
                            \Zend\Validator\NotEmpty::IS_EMPTY => 'Chọn hãng sản xuất.'
                        )
                    )
                )
            )
        ));

        //for thong so co ban
        $this->add(array(
            'name' => 'product_spec_content',
            'allow_empty' => true
        ));
        
        //filter for product content
        $this->add(array(
            'name' => 'product_content_detail',
            'allow_empty' => true
        ));
    }

}
